package com.car.bussi.controller;

import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.car.bussi.form.BussiCustomerForm;
import com.car.bussi.query.BussiCustomerQuery;
import com.car.bussi.service.IBussiCustomerService;
import com.car.bussi.vo.BussiCustomerVO;
import com.car.common.Result;
import com.car.common.validator.ValidatorUtil;

import cn.hutool.core.io.IoUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;

@RestController
@RequestMapping("/bussi/customer")
public class BussiCustomerController {
	
	@Autowired
	private IBussiCustomerService bussiCustomerService;
	
	/**
	 * @Title: list
	 * @author: TiTanLee   
	 * @date: 2019年12月12日 上午9:18:16 
	 * @Description: 分页查询客户
	 * @param query
	 * @return
	 * @return: Object
	 */
	@RequestMapping("/list.do")
	public Object list(BussiCustomerQuery query) {
		return bussiCustomerService.queryPage(query);
	}
	
	/**
	 * @Title: export
	 * @author: TiTanLee   
	 * @date: 2019年12月12日 上午9:17:51 
	 * @Description: 导出客户名单方法
	 * @param query
	 * @param resq
	 * @throws IOException
	 * @return: void
	 */
	@SuppressWarnings("unchecked")
	@RequestMapping("/export.do")
	public void export(BussiCustomerQuery query,HttpServletResponse resq) throws IOException {
		Result rs = bussiCustomerService.queryList(query);
		List<BussiCustomerVO> data = (List<BussiCustomerVO>) rs.getData();
		// 创建excel的write对象		与.xlsx文件进行绑定
		ExcelWriter writer = ExcelUtil.getWriter();
		// 设置字段别名	（自定义标题别名）
		writer.addHeaderAlias("id", "ID");
		writer.addHeaderAlias("idCard", "身份证号");
		writer.addHeaderAlias("custName", "客户名称");
		writer.addHeaderAlias("sex", "性别（1:男 2:女）");
		writer.addHeaderAlias("address", "地址");
		writer.addHeaderAlias("phone", "手机号");
		writer.addHeaderAlias("position", "职位");
		writer.addHeaderAlias("createTime", "创建时间");
		// 合并单元格的标题行，使用默认标题样式：此时excel的文件指针在第一行
		writer.merge(7,"客户名单");
		writer.write(data,true);
		resq.setContentType("application/vnd.ms-excel;charset=utf-8");
		// 设置弹出下载对话框的文件名	（中文需要写编码格式）
		resq.setHeader("Context-Disposition", "attachment;filename=" + URLEncoder.encode("客户名单.xls","UTF-8"));
		ServletOutputStream out = resq.getOutputStream();
		writer.flush(out,true);
		// 释放资源
		writer.close();
		IoUtil.close(out);
	}
	
	/**
	 * @Title: add
	 * @author: TiTanLee   
	 * @date: 2019年12月12日 上午9:21:39 
	 * @Description: 添加客户的方法
	 * @param form
	 * @return
	 * @return: Object
	 */
	@RequestMapping("/add.do")
	public Object add(BussiCustomerForm form) {
		// 校验数据
		ValidatorUtil.validator(form);
		Result rs = bussiCustomerService.createNewCustomer(form);
		return rs;
	}
	
	/**
	 * @Title: update
	 * @author: TiTanLee   
	 * @date: 2019年12月12日 上午9:22:07 
	 * @Description: 修改客户的方法
	 * @param form
	 * @return
	 * @return: Object
	 */
	@RequestMapping("/update.do")
	public Object update(BussiCustomerForm form) {
		//你校验数据
		ValidatorUtil.validator(form);
		Result rs = bussiCustomerService.updateCustomer(form);
		return rs;
	}

}
